package k_singleton.a_design_pattern.b_thread_safe_lazy;


/**
 * Created by wug on 2016/7/15 0015.
 */
public class MainTest {
    public static void main(String[] args) {
        new MainTest().run();
    }

    public void run() {
        /**
         * 这个就是线程安全的 你会发现
         * 所有的输出都是1个对象 因为它们的hash码都一样
         * 对这就是线程安全的结果 但是这个效率太低了
         *
         * 因为在任何时候只能有一个线程调用 getInstance() 方法。
         * 但是同步操作只需要在第一次调用时才被需要，即第一次创建单例实例对象时。
         * 这就引出了双重检验锁。
         */

        Runnable task = new Task();
        for (int i = 0; i < 10; i++) {
            Thread t = new Thread(task, String.valueOf(i));
            t.start();
        }

    }

    public class Task implements Runnable {
        @Override
        public void run() {
            Singleton singleton = Singleton.getInstance();
            System.out.println(singleton + ":" + singleton.hashCode());
        }
    }



}
